package com.hhc.controller;

import com.hhc.dto.*;
import com.hhc.dto.LoginRequest;
import com.hhc.dto.RegisterRequest;
import com.hhc.entity.UserInfo;
import com.hhc.query.NoticeQuery;
import com.hhc.query.UserQuery;
import com.hhc.service.AuthService;
import com.hhc.service.PermissionService;
import com.hhc.utils.RestResult;
import jakarta.validation.Valid;
import java.util.Map;
import lombok.RequiredArgsConstructor;

import org.springframework.web.bind.annotation.*;

/**
 * 认证控制器，提供用户注册、登录等功能接口
 *
 * @author pc
 */
@RestController
@RequestMapping("/auth")
@RequiredArgsConstructor
public class AuthController {

    private final AuthService authService;
    private final PermissionService permissionService;

    /**
     * 用户注册接口
     *
     * @param registerRequest 注册请求参数
     * @return RestResult 响应结果
     */
    @PostMapping("/register")
    public RestResult<?> register(@RequestBody @Valid RegisterRequest registerRequest) {
        boolean success = authService.register(registerRequest);
        if (!success) {
            return RestResult.failure("用户名已存在");
        }
        return RestResult.success("注册成功");
    }

    /**
     * 用户登录接口
     *
     * @param loginRequest 登录请求参数
     * @return RestResult 响应结果
     */
    @PostMapping("/login")
    public RestResult<?> login(@RequestBody @Valid LoginRequest loginRequest) {
        Map<String, Object> result = authService.login(loginRequest);
        if (result == null) {
            return RestResult.failure("用户名或密码错误");
        }
        return RestResult.success(result);
    }
    /**
     * 查询用户列表
     *
     * @param query 查询参数
     * @return RestResult
     */
    @GetMapping("/list")
    public RestResult<Object> list(@Valid UserQuery query) {
        return authService.list(query);
    }
    /**
     * 更新用户信息接口
     */
    @PutMapping("/update/{id}")
    public RestResult<?> updateUser(
            @PathVariable Long id,
            @RequestBody @Valid LoginRequest loginRequest) {
        boolean success = authService.updateUser(id, loginRequest);
        return success ? RestResult.success("更新成功") : RestResult.failure("更新失败");
    }

    /**
     * 删除用户接口
     */
    @DeleteMapping("/delete/{id}")
    public RestResult<?> deleteUser(@PathVariable Long id) {
        boolean success = authService.deleteUser(id);
        return success ? RestResult.success("删除成功") : RestResult.failure("删除失败");
    }

    /**
     * 获取当前用户信息
     * @return 当前用户信息
     */
    @GetMapping("/me")
    public RestResult<UserInfo> getCurrentUser() {
        return RestResult.success();

    }
}